﻿@* Quitar esta sección si se utilizan agrupaciones *@
@section Scripts {
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
}
@{
    Layout = "~/_SiteLayout.cshtml";
    Page.Title = "Consultar Ganador Elección.";

    if (!WebSecurity.IsAuthenticated)
    {
        Response.Redirect("../Account/login.cshtml");
    }

    // Inicializar variables de página generales    
    var Cbo_empresa = "";
    var Cbo_eleccion = "";

    // Validación de la instalación
    Validation.RequireField("Cbo_eleccion", "Debe seleccionar un tipo de elección.");

    if (IsPost)
    {
        AntiForgery.Validate();
        Cbo_eleccion = Request.Form["Cbo_eleccion"];
        Cbo_empresa = Request.Form["Cbo_empresa"];


        if (Cbo_empresa.IsEmpty() || Cbo_empresa.ToString().Trim() == "0")
        {
            if (Session["Val_carga_eleccion"] != null && !Cbo_empresa.Trim().IsEmpty())
            {
                Session["Val_carga_eleccion"] = null;
            }
            else
            {
                ModelState.AddError("Cbo_empresa", "Seleccione una empresa.");
            }
        }
        else
        {
            //Session["Val_carga_eleccion"] != null &&
            if (Session["Val_carga_eleccion"] != null && (Cbo_eleccion.IsEmpty() || Cbo_eleccion.ToString().Trim() == "0"))
            {
                ModelState.AddError("Cbo_eleccion", "Seleccione un tipo de elección");
            }

            if (Cbo_empresa.ToString() != "0" && (Cbo_eleccion.IsEmpty() || Cbo_eleccion.ToString() == "0") && Session["Val_carga_eleccion"] == null)
            {
                Candidato Obj_candidatos = new Candidato();
                Obj_candidatos.Objeleccion.id_empresa = int.Parse(Cbo_empresa.ToString());
                Obj_candidatos.Objeleccion.estado = true;
                var mylista_validadora = Obj_candidatos.consul_ele(1);
                ModelState.AddError("Cbo_eleccion", "Seleccione un tipo de elección");
                if (mylista_validadora.Count > 0)
                {
                    if (Cbo_eleccion.ToString() != "0" || !Cbo_eleccion.IsEmpty())
                    {
                        ModelState.Remove("Cbo_eleccion");
                    }
                }
                mylista_validadora = null;
            }
        }

        if (Cbo_empresa.ToString() != "0" && Cbo_eleccion.ToString() != "0" && Session["Val_carga_eleccion"] == null)
        {
            Session["Val_carga_eleccion"] = 1;
        }

        if (Session["Cbo_empresa"] == null && Cbo_empresa.ToString().Trim() != "0")
        {
            if (Session["Cbo_empresa"] == null)
            {
                Session["Cbo_empresa"] = Cbo_empresa.ToString().Trim();
            }
            
            if (Cbo_empresa.ToString().Trim() != Session["Cbo_empresa"].ToString().Trim())
            {
                Session["Cbo_empresa"] = null;
            }            
        }
        
        if (Validation.IsValid() && ModelState.IsValid && Session["Val_carga_eleccion"] != null && Session["Cbo_empresa"].ToString().Trim() == Cbo_empresa.Trim())
        {
            Reporte Obj_reporte = new Reporte();
            Obj_reporte.Objreporte.id_eleccion = int.Parse(Cbo_eleccion.ToString());

            var Lista_reporte = Obj_reporte.consultar(1);

            if (Lista_reporte.Count > 0)
            {
                List<Vo_reporte> Lista_val = new List<Vo_reporte>();

                foreach (var propiedad in Lista_reporte)
                {
                    Vo_reporte Obj_vo_reporte = new Vo_reporte();
                    Obj_vo_reporte.Candidto_vo = propiedad.Candidato;
                    Obj_vo_reporte.Votos_vo = propiedad.votos;
                    Lista_val.Add(Obj_vo_reporte);
                }

                //Lista de candidatos para validar los que no tengan votos.
                Candidato Obj_candidato = new Candidato();
                Obj_candidato.Objcandidato.id_eleccion = int.Parse(Cbo_eleccion.ToString());
                var Lista_candidatos = Obj_candidato.consultar_cant(1);

                foreach (var propiedad in Lista_candidatos)
                {
                    Voto Obj_valida_votos_candidato = new Voto();
                    Obj_valida_votos_candidato.Objvoto.id_candidato = propiedad.id_candidato;
                    Obj_valida_votos_candidato.Objvoto.id_eleccion = int.Parse(Cbo_eleccion.ToString());

                    var lista_interna = Obj_valida_votos_candidato.consultar_voto(1);

                    if (lista_interna.Count == 0)
                    {
                        Obj_reporte.Objusuario.id_Usuario = propiedad.id_usuario;
                        var lista_usuario = Obj_reporte.consultar_usuario(1);

                        if (lista_usuario.Count > 0)
                        {
                            Vo_reporte Obj_vo_reporte = new Vo_reporte();
                            Obj_vo_reporte.Candidto_vo = lista_usuario[0].apellidos + " " + lista_usuario[0].nombres;
                            Obj_vo_reporte.Votos_vo = 0;
                            Lista_val.Add(Obj_vo_reporte);
                        }

                        lista_usuario = null;
                    }
                    lista_interna = null;
                    Obj_valida_votos_candidato = null;
                }
                Lista_candidatos = null;

                //Validados votos en blanco y cancelados para añadir como candidato.

                //Voto cancelado
                Voto Obj_valida_votos_cance = new Voto();
                Obj_valida_votos_cance.Objvoto.id_tipo_voto = 2;
                Obj_valida_votos_cance.Objvoto.id_eleccion = int.Parse(Cbo_eleccion.ToString());

                var lista_voto_cancelado = Obj_valida_votos_cance.consultar_voto(1);

                if (lista_voto_cancelado.Count == 0)
                {
                    Vo_reporte Obj_vo_reporte = new Vo_reporte();
                    Obj_vo_reporte.Candidto_vo = "Voto cancelado";
                    Obj_vo_reporte.Votos_vo = 0;
                    Lista_val.Add(Obj_vo_reporte);
                }

                lista_voto_cancelado = null;

                Obj_valida_votos_cance.Objvoto.id_tipo_voto = 3;
                Obj_valida_votos_cance.Objvoto.id_eleccion = int.Parse(Cbo_eleccion.ToString());

                var lista_voto_blanco = Obj_valida_votos_cance.consultar_voto(1);

                if (lista_voto_blanco.Count == 0)
                {
                    Vo_reporte Obj_vo_reporte = new Vo_reporte();
                    Obj_vo_reporte.Candidto_vo = "Voto en blanco";
                    Obj_vo_reporte.Votos_vo = 0;
                    Lista_val.Add(Obj_vo_reporte);
                }

                lista_voto_blanco = null;

                //Ordenar la lista de mayor a menor por Cantidad de votos.
                var empList = from emp in Lista_val
                              orderby emp.Votos_vo
                              select emp;
                Lista_val = empList.ToList();

                
                Session["Cbo_empresa"] = Cbo_empresa;
                
                var myChart = new Chart(width: 600, height: 400)
                .AddTitle("Resultados Elección")
                .AddSeries(name: "Eleccion", chartType: "Bar",
                           xValue: Lista_val,
                           xField: "Candidto_vo",
                           yValues: Lista_val,
                           yFields: "Votos_vo")
                .Write();
            }
            else
            {
                ModelState.AddFormError("No hay datos de la elección selecionada.");
            }
        }
    }
}
@if (!User.IsInRole("Admin") && !User.IsInRole("Candidato"))
{
    ModelState.AddError("errorGeneral", "El usuario: " + User.Identity.Name + " NO tiene permisos sobre este formulario.");
    @Html.ValidationMessage("errorGeneral")   
}
else
{
    if (Cbo_empresa == string.Empty)
    {
        Cbo_empresa = "0";
    }

    if (Request["Val"] != null)
    {
        Cbo_empresa = Request["Cbo_empresa"].ToString();
    }
    
    Candidato Obj_candidatos = new Candidato();
    Obj_candidatos.Objeleccion.id_empresa = int.Parse(Cbo_empresa.ToString());
    Obj_candidatos.Objeleccion.estado = true;
    var mylista = Obj_candidatos.consul_ele(1);        
    
    <form id="form1" method="post" action="">
    @AntiForgery.GetHtml()
    @* Si existe al menos un error de validación, informar al usuario *@
    @Html.ValidationSummary("No hay votos para la elección. Inténtelo de nuevo.", excludeFieldErrors: true, htmlAttributes: null)
    @{
    Empresa Obj_empresa = new Empresa();
    Obj_empresa.Objempresa.estado = true;
    var lista_empresa = Obj_empresa.consultar_total(1);

    //Candidato Obj_candidatos = new Candidato();
    //Obj_candidatos.Objeleccion.id_empresa = int.Parse(Session["id_empresa"].ToString());
    //Obj_candidatos.Objeleccion.estado = true;
    //var mylista = Obj_candidatos.consul_ele(1);
    }
    <fieldset>
        <legend>Formulario de consulta ganador elección</legend>
        <ol>
            <li class="email">
                <label for="Cbo_empresa" @if (!ModelState.IsValidField("Cbo_empresa"))
                                         {<text> class="error-label" </text> }>
                    Empresa</label>
                <select id="Cbo_empresa" name="Cbo_empresa" onchange="this.form.submit()" @Validation.For("Cbo_empresa")>
                    <option value="0">Seleccione</option>
                    @foreach (var propiedad in lista_empresa)
                    {
                        if (!IsPost && Request["Val"] == null)
                        {
                            <option value="@propiedad.id_empresa ">@propiedad.nombre</option>                                
                        }
                        else
                        {
                            if (Request["Cbo_empresa"].ToString().Trim() == propiedad.id_empresa.ToString().Trim())
                            {
                        <option value="@propiedad.id_empresa " selected="selected">@propiedad.nombre</option>                                
                            }
                            else
                            {
                        <option value="@propiedad.id_empresa ">@propiedad.nombre</option>                                
                            }
                        }
                    }
                </select>
                @Html.ValidationMessage("Cbo_empresa")
            </li>
            <li class="email">
                <label for="Cbo_eleccion" @if (!ModelState.IsValidField("Cbo_eleccion"))
                                          {<text> class="error-label" </text> }>
                    Elección</label>
                <select id="Cbo_eleccion" name="Cbo_eleccion" @Validation.For("Cbo_eleccion")>
                    <option value="0">Seleccione</option>
                    @{ if (mylista.Count > 0 && (Cbo_empresa.ToString() != "0" && Cbo_empresa.ToString() != string.Empty))
                       {
                           Session["Val_carga_eleccion"] = 1;
                           //if (Session["Cbo_empresa"] != null)
                           //{
                           //    Session["Cbo_empresa"] = null;
                           //}
                           
                           foreach (var propiedad in mylista)
                           {
                               if (!IsPost && Request["Val"] == null)
                               {
                                    <option value="@propiedad.id_eleccion ">@propiedad.titulo</option>                                
                               }
                               else
                               {
                                   if (Request["Cbo_eleccion"].ToString().Trim() == propiedad.id_eleccion.ToString().Trim())
                                   {
                                        <option value="@propiedad.id_eleccion " selected="selected">@propiedad.titulo</option>                                
                                   }
                                   else
                                   {
                                        <option value="@propiedad.id_eleccion ">@propiedad.titulo</option>                                
                                   }
                               }
                           }
                       }
                       else
                       {
                           Session["Val_carga_eleccion"] = null;
                       }
                    }
                </select>
                @Html.ValidationMessage("Cbo_eleccion")
            </li>
        </ol>
        <input type="submit" value="Consultar" />
    </fieldset>
    </form>
}